home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d21
/
qemmnote.arc
/
HEX.TEC
< prev
next >
Wrap
Text File
|
1991-06-26
|
9KB
|
251 lines
ID:HX Hexadecimal Numbers and QEMM
Quarterdeck Technical Note #190
by Vernon Balbert
Q: Why are these numbers mixed up with these letters and
what do
they mean?
A: These numbers and letters are part of a numbering system
that is
used by computers.
Computers don't count the way people do. People use
decimal, or
base 10 for counting and we use the numbers 0-9 giving us 10
different
symbols for counting. Computers, on the other hand, use
binary, a
number system that uses just zeros and ones. So, a typical
binary
number might look like this:
1001011011010010
Kind of confusing, huh? Well, even to programmers, these
numbers
are confusing. People just don't work well with binary.
Computers
do. Binary numbers can be translated to decimal quite easily,
but
they just aren't neat. For instance, if you use an eight
digit binary
number, you can count up to 255. Well, this has three decimal
numbers
and multiples of 256 (counting 0) is just not very neat or
easy.
However, there is a different way of counting that is widely
used by
computer people. This is called HEXADECIMAL. Hexadecimal is
base 16.
What this means is that if you were to start counting from 0,
you
would continue up to some single digit that would represent
15. And
that's where the letters come from. Hexadecimal numbers go
like this:
0 1 2 3 4 5 6 7 8 9 A B C D E F
Well, part of that looks normal, at least until the 9.
The A
translates as 10, the B as 11 on up until the F is equal to
15. After
F, you tack on a 1 at the beginning of the number just like we
do so
you would get 10. And, yes, 10 plus 10 equal 20. Since 10 in
hexa-
decimal is equal to 16 in decimal, it would be logical to
assume that
if 16+16=32 then 20 hexadecimal equals 32 decimal. Rest
assured, it
does. Often, to tell the difference between hexadecimal and
decimal
numbers, programmers will use H at the end of the number to
say that
it is hexadecimal, i.e. 10H. Now, if you have 8 binary
numbers, you
can count either to 256, or to FFH. (Remember, the H stands
for
hexadecimal.) This means that you can count in multiples of
4 binary
digits with one hexadecimal digit. For instance:
10010110=96H=150 base 10
Now, you might ask, why use multiples of 4 binary digits?
Well,
the answer is really quite simple. Computer people like to
group
binary numbers in groups of eight. A hexadecimal number can
represent
4 binary digits. Each number is called a bit and each group
of eight
bits is a byte. And computer memory is measured in bytes.
Each byte
can represent one character such as the letter "Q" or the
number "3".
Your hard disk is measured in megabytes, or millions of bytes.
So,
hexadecimal is a number system that both computers and humans
can work
with easily. Actually, computers don't work with hexadecimal,
but
most programs that work with hexadecimal numbers have routines
that
translate the hexadecimal numbers to binary for the computer
because
it's so easy; simply convert each hex digit into the
appropriate 4
binary digits. By the way, hexadecimal is often referred to
as "hex"
for short.
Okay, now we have to delve a little into the history of
IBM PCs
to understand the way you address memory.
When IBM first came out with the PC, the Intel 8088
processor was
used. The 8088 can access 1 megabyte of memory. However, the
chip
only has 16 bit registers. (A register is an internal memory
loca-
tion.) You can only count to 65535 with 16 bits. In order to
access
the 20 bits outside the microprocessor, an alternate method of
ad-
dressing memory was developed. So, addresses had the
following
format:
ssss:oooo
The first four hex digits (ssss) are the segment address.
The
last four (oooo) are the offset address. Together, these can
address
the entire 1 megabyte space of the 8088. This is called
relative
addressing. You never actually say the exact address that you
are
pointing at, just an address relative to a different position.
For
instance, if you have an address such as 1234:2319, you would
take
1234H, add a 0 to the end so it turns into 12340H and then add
2319H
to it to get 14659H.
When the 80286 came out, it had 24 address lines to
address more
than the 1 megabyte of memory available. (24 address lines
lets you
address 16 megabytes of memory.) Additionally, the internal
registers
were enlarged to 24 bits so you didn't have to go through the
segment
and offset gyrations. So, you could now use absolute
addressing. The
address now takes this format:
XXXXXX
Notice now, that there are 6 digits instead of two sets
of 4 when
an 80286 is in "protected" mode (6 digit mode). DOS,
unfortunately,
only understands segmented memory addressing which is in
"real" mode.
Intel built in a "real" mode into the 80286 and higher
processors so
that they would still understand relative addressing. This
difference
is VERY important. It is the main reason that you can't use
exTENDed
memory (only available in "protected" mode) to run DOS
programs (which
require "real" mode).
QEMM, QRAM and DESQview all observe the relative
addressing
scheme. So, when you include or exclude areas of memory with
QEMM,
you use the segment address. Typically, the only exclusions
you will
use involve the area above the 640K program space. This is a
384K
area of memory that is normally used by adapter cards and ROMs
in your
computer. The address range of the lower 640K is 0000-9FFF.
Remem-
ber, these are the segment addresses, not the offset
addresses. The
area above 640K is the A000-FFFF range.
Here is a translation table so you can convert some common
hexadecimal
addresses into decimal and back.
Common way of saying it Decimal Hexadecimal
Segment:Offset
1K 1024 400 0040:0000
or 0000:0400
2K 2048 800 0080:0000
or 0000:0800
4K 4096 1000 0100:0000
or 0000:1000
8K 8192 2000 0200:0000
or 0000:2000
16K 16384 4000 0400:0000
or 0000:4000
32K 32768 8000 0800:0000
or 0000:8000
64K 65536 10000
1000:0000
128K 131072 20000
2000:0000
256K 262144 40000
4000:0000
384K 393612 60000
6000:0000
512K 524288 80000
8000:0000
640K 655350 A0000
A000:0000
704K 720896 B0000
B000:0000
736K 753664 B8000
B800:0000
768K 786432 C0000
C000:0000
832K 851968 D0000
D000:0000
896K 917504 E0000
E000:0000
960K 983040 F0000
F000:0000
1024K 1048576 100000 1MB and
beyond cannot
be
addressed with the
segment:offset method.
In summary, we see that hexadecimal (or hex, for short) is
actually
base 16, decimal is base 10 and binary is base 2. Hex numbers
go from
0 to F, decimal numbers go from 0 to 9 and binary go from 0 to
1. Hex
numbers are used to make it easier for people to work with
numbers
that the computer uses.
Copyright (C) 1991 by Quarterdeck Office Systems
* * * E N D O F F I L E * * *